package Gather.ListExercise;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * ClassName:ListText003
 * Package:Gather.ListExercise
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/7-11:11
 * @Version:v1.0
 */
public class ListText003 {
    /*
    * List集合的遍历方式
    * 1.迭代器遍历
    * 2.列表迭代器
    * 3.增强for
    * 4.Lambda表达式
    * 5.普通for循环
    * */
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        //1.迭代器遍历
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }

        //2.增强for
        //变量s其实就是一个第三方的变量而已
        //再循环的过程中,依次表示集合中的每一个元素
        for (String s : list) {
            System.out.println(s);
        }

        //3.Lambda表达式(list.forEach)
        //forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素
        //并把每一个元素传递给下面的accept方法
        //accept方法的形参s,依次表示集合中的每一个元素
        list.forEach(s-> System.out.println(s));

        //4.普通for循环
        //size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }

        //列表迭代器
        //获取一个列表迭代器的对象,里面的指针默认也是指向0索引
        //额外添加了一个方法：在遍历的过程中,可以添加元素
        ListIterator<String> it1 = list.listIterator();
        while (it.hasNext()){
            String str = it.next();
            if ("bbb".equals(list)){
                it1.add("QQQ");
            }
        }
        System.out.println(list);
    }
}

/*
* 五种遍历方式对比
* 1.迭代器遍历：在遍历的过程中需要删除元素,请使用迭代器
* 2.列表迭代器：在遍历的过程中需要添加元素,使用列表迭代器
* 3.增强for遍历/Lambda表达式：仅仅想遍历,那么使用增强for或Lambda表达式
* 4.普通for：如果遍历的时候想操作索引,那么可以用普通for*/